package com.rayframework.boot;

import com.rayframework.boot.config.ApplicationConfig;
import com.rayframework.boot.proxy.RayProxy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Ray框架启动类
 *
 * @author LiaoYuXing-Ray
 * @version 1.0
 * @createDate 2023/11/25 10:38
 **/
public class RayApplication {

    private static final Logger LOGGER = LoggerFactory.getLogger(RayApplication.class);

    private final RayProxy proxy = new RayProxy();

    /**
     * 初始化标记 2023/9/12 15:31
     */
    private static boolean isInitialized = false;

    public RayApplication() {
    }

    public RayApplication boot() {
        // 加载配置
        return this;
    }

    public void start() {
        this.proxy.run();
    }


    /**
     * 启动类初始化 - 配置全局
     * 只有此处init设置为私有，双层防护
     *
     * @author LiaoYuXing-Ray 2023/9/7 11:44
     **/
    private static void init() {
        if (!isInitialized) {
            /*
                通常情况下，fastjson 应该与 JavaBean 兼容。
                但是，在某些特殊情况下，例如使用了不同版本的 fastjson 库与其他依赖库（如 Spring Boot）时，
                可能会出现兼容性问题。在这种情况下，
                可以通过设置 TypeUtils.compatibleWithJavaBean 为 false 来禁用 JavaBean 兼容性检查，
                但这样可能会导致其他潜在问题。
                因此，在遇到类似问题时，建议检查并解决库版本冲突或其他兼容性问题。 2023/9/12 13:19
            */
//            TypeUtils.compatibleWithJavaBean = true;
            ApplicationConfig.init(); // 加载框架配置
            // 标记已经初始化
            isInitialized = true;
        }
    }

    static {
        init();
    }

}
